package com.neuedu.api.collection;

import com.neuedu.utils.InputUtils;

import java.sql.Array;
import java.util.*;

/**
 * @author 金山
 * 项目：javase
 * site: https://blog.fulfill.com.cn
 * 描述
 * @data 2024/10/2813:53
 */
public class MyHashMap {

    /***
     *     index      编号  姓名   性别
     *      1        {0001   张三   男}
     *      2         {0002   李四   男}
     *      0        { 0003   王五   男}
     *      1        { 0004   赵六   男}    赵六的hash  和 张三 的 hashcode 一样了
     *
     *        后面的程序 希望通过  [姓名]  查找元素
     *
     *
     * HashMap
     *
     *
     *     table:[
     *                       Key   |        valiue                  next
     *            0  Node [   王五   |       {0002   李四   男}         ]
     *            1  Node [   张三   |       {0001   张三   男}   ,next =   { 0004   赵六   男}     ]
     *            2  Node [   李四   |      {0003   王五   男}         ]
     *     ]
     *
     *
     *     查找  王五     根据 "王五"   计算   hashcode   -- 》   index 0   {0002   李四   男}
     *          赵六                          1 . hashcode  index     1
     *                                        2   key： 张三    查找的 “赵六"   equals不相等
     *                                        3  next  直到  equals 为true
     *
     *
     */


    public static void main(String[] args) {

        Human human1 = new Human("001","张三",18);
        Human human2 = new Human("002","李四",18);
        Human human3 = new Human("003","王五",18);
        Human human4 = new Human("004","赵六",18);
        Human human5 = new Human("005","周期",20);


        // List list = new ArrayList();
        // list.add(human1);
        // list.add(human2);
        // list.add(human3);
        // list.add(human4);
        // list.add(human5);
        //
        // for (int i = 0; i < list.size(); i++) {
        //     Human human = (Human) list.get(i);
        //     System.out.println("循环次数 : "+i);
        //     if("周期".equals(human.getName())){
        //         System.out.println("周期的年龄似乎: "+human.getAge());
        //     }
        // }


        HashMap hashMap = new HashMap();
        hashMap.put(human1.getName() , human1);
        hashMap.put(human2.getName() , human2);
        hashMap.put(human3.getName() , human3);
        hashMap.put(human4.getName() , human4);
        hashMap.put(human5.getName() , human5);


        //查找
        Human human =  (Human)hashMap.get(human3.getName());


        System.out.println("human = " + human);


        //遍历HashMap
        //获取到  Key 的集合
        //获取到  value 的集合
        //Entry集合



        //所有的key
        Set keySet = hashMap.keySet();
        for (Object key : keySet) {
            Object value = hashMap.get(key);
            System.out.printf("key: %s,value:%s\r\n",key,value);
        }

        System.out.println("\r\n\r\n\r\n");
        Collection values = hashMap.values();
        System.out.println("values.getClass() = " + values.getClass());
        for (Object value : values) {
            System.out.printf("value:%s\r\n",value);
        }


        System.out.println("\r\n\r\n\r\n");

        Set entrySet = hashMap.entrySet();

        for (Object  object : entrySet) {
            Map.Entry entry = (Map.Entry) object;
            Object key = entry.getKey();
            Object value = entry.getValue();
            System.out.printf("key: %s,value:%s\r\n",key,value);
        }


        //判断是否包含
        System.out.println("hashMap.containsKey(\"张三\") = " + hashMap.containsKey("张三"));
        System.out.println("hashMap.containsKey(\"张三1\") = " + hashMap.containsKey("张三1"));


        // String numsStr = InputUtils.getString("请输入一些数字(1,2,3,4,5,6)");
        //
        //
        // String[] nums = numsStr.split(",");
        // Map map = new HashMap();
        // for (String num : nums) {
        //     map.put(num,null);
        // }
        // //可以；利用HashMap的特性去除重复数据
        // System.out.println("map.size() = " + map.size());
        //
        //



        //removeKey 移除key对应的元素

        Map map = new HashMap();

        map.put("0001","张三");
        map.put("0002","李四");
        map.put("0003","王五");

        System.out.println("map = " + map);

        Object removeObject = map.remove("0002");
        System.out.println("removeObject = " + removeObject);
        System.out.println("map = " + map);

    }





}
